"use client";
import { AntdRegistry } from "@ant-design/nextjs-registry";
import React, { useCallback, useEffect } from "react";
import BasicLayout from "@/layouts/BasicLayout";
import { Provider, useDispatch } from "react-redux";
import store, { AppDispatch } from "@/stores";
import { getLoginUserUsingGet } from "@/api/userController";
import { setLoginUser } from "@/stores/loginUser";
import AccessLayout from "@/access/AccessLayout";

/**
 * 全局初始化逻辑(高阶组件)
 * @param children
 * @constructor
 */
// const InitLayout: React.FC<Readonly<{ children: React.ReactNode }>> = ({
//   children,
// }) => {
//   const dispatch = useDispatch<AppDispatch>();
//
//   // useCallback 缓存函数 避免多次重复执行
//   /**
//    * 全局初始化函数 执行全局单次调用的代码
//    */
//   // 初始化全局用户状态
//   const doInitLoginUser = useCallback(async () => {
//     // 获取用户信息
//     const res = await getLoginUserUsingGet();
//     if (res.data) {
//       // 更新全局用户状态
//       dispatch(setLoginUser(res.data));
//     } else {
//       // 测试代码，实际可删除
//       // setTimeout(() => {
//       //   const testUser = {
//       //     userName: "测试登录",
//       //     id: 1,
//       //     userAvatar: "https://www.code-nav.cn/logo.png",
//       //     userRole: Access_Enum.ADMIN
//       //   };
//       //   dispatch(setLoginUser(testUser));
//       // }, 3000);
//     }
//   }, []);
//
//   useEffect(() => {
//     doInitLoginUser();
//   }, []);
//   return children;
// };

//  async function getStaticProps() {
//   const response = await axios.get('https://mianshiya.com/data', {
//     headers: {
//       'Cache-Control': 'no-store',
//     },
//   });
//
//   return {
//     props: {
//       data: response.data,
//     },
//     revalidate: 10000, // 在 10,000 秒后重新生成页面
//   };
// }

/**
 * 请求缓存数据
 */
async function getStaticProps() {
  // eslint-disable-next-line react-hooks/rules-of-hooks
  const dispatch = useDispatch<AppDispatch>();
  let result = null;
  // useCallback 缓存函数 避免多次重复执行
  /**
   * 全局初始化函数 执行全局单次调用的代码
   */
  // 初始化全局用户状态
  // eslint-disable-next-line react-hooks/rules-of-hooks
  const doInitLoginUser = useCallback(async () => {
    // 获取用户信息
    const res = await getLoginUserUsingGet();
    result = res;
    if (res.data) {
      // 更新全局用户状态
      dispatch(setLoginUser(res.data));
    } else {
      // 测试代码，实际可删除
      // setTimeout(() => {
      //   const testUser = {
      //     userName: "测试登录",
      //     id: 1,
      //     userAvatar: "https://www.code-nav.cn/logo.png",
      //     userRole: Access_Enum.ADMIN
      //   };
      //   dispatch(setLoginUser(testUser));
      // }, 3000);
    }
  }, []);

  // eslint-disable-next-line react-hooks/rules-of-hooks
  useEffect(() => {
    doInitLoginUser();
  }, []);
  return {
    props: {
      data: result?.data,
    },
    revalidate: 3600 * 1000, // 在 1h 后重新生成页面（将首页获取的数据缓存一小时，1h 内再次进入首页 数据将不再向后端发送请求）
  };
}

/**
 * 全局初始化逻辑(高阶组件)
 * @param children
 * @constructor
 */
const InitLayout: React.FC<Readonly<{ children: React.ReactNode }>> = ({
  children,
}) => {
  getStaticProps()
  return children;
};



export default function RootLayout({
  children,
}: Readonly<{
  children: React.ReactNode;
}>) {
  return (
    <html lang="zh">
      <body>
        <AntdRegistry>
          <Provider store={store}>
            <InitLayout>
              <BasicLayout>
                <AccessLayout>{children}</AccessLayout>
              </BasicLayout>
            </InitLayout>
          </Provider>
        </AntdRegistry>
      </body>
    </html>
  );
}
